import { type ConfigEnv, type PluginOption, type UserConfig, defineConfig } from 'vite';
import * as uni from '@dcloudio/vite-plugin-uni';
import type { VitePluginUniOptions } from '@dcloudio/vite-plugin-uni';
import { dirname, resolve } from 'node:path';
import { formatDateTime } from './src/mxp-ui/mxp-tool/utils/time';
import { viteAutoDeployPlugin } from 'vite-auto-deploy';
import { fileURLToPath } from 'url';
import {
  compression,
  copyDyPackageFile,
  copyGetProjectFile,
  copyHtaccessFile,
  copyManifestJsonFile,
  copyProjectPrivateConfigFile,
  delWxLazyCodeLoading,
} from './vite/vite-plugin';
import pack from './package.json';

const __dirname = dirname(fileURLToPath(import.meta.url));

const uniPlugin = (uni.default as any).default as (rawOptions?: VitePluginUniOptions) => PluginOption[];
// https://cn.vitejs.dev/config/
export default defineConfig(({ command }: ConfigEnv): UserConfig => {
  const isBuild = Boolean(command === 'build'); // 是不是生产环境(预览环境也不是生产环境)
  return {
    plugins: [
      uniPlugin(),
      copyProjectPrivateConfigFile(),
      copyManifestJsonFile(),
      /** 在开发模式下删除微信 app.json的 lazyCodeLoading 字段 （解决charge-dialog模块不渲染的问题） */
      delWxLazyCodeLoading(),
      copyHtaccessFile(),
      copyDyPackageFile(),
      compression(),
      copyGetProjectFile(),
      viteAutoDeployPlugin({
        /** 上传地址 */
        uploadUrl: 'https://res.daishubobo.com/mywl_asset_server/zip/upload',
        /** 项目名称 (如果多个项目都是用的同上传地址时，服务端可用此字段区分是哪一个项目) */
        projectName: pack.name,
        /** 上传完成后,是否保留压缩包到本地 */
        saveLocalZip: false,
        /** 是否开启自动部署 */
        autoDeploy: process.env.NODE_ENV === 'production' && (process.env.UNI_PLATFORM === 'web' || process.env.UNI_PLATFORM === 'h5'),
      }),
    ],
    base: `/`, // 注意全局搜索一下，在 index.html或其他地方可能有依赖
    css: { preprocessorOptions: { css: { charset: false }, scss: { silenceDeprecations: ['legacy-js-api'] } } },
    define: {
      __APP_VERSIONS__: JSON.stringify(`V${formatDateTime(new Date(), 'YYYYMMDDHHmm')}`),
    },
    // ******打印+debugger清除配置******
    esbuild: {
      pure: process.env.VITE_NODE_ENV === 'development' ? [] : [],
    },
    server: {
      open: isBuild ? 'https://app.daishubobo.com/' : true, // 是否自动打开浏览器
      host: true, // 服务器主机名,如果允许外部访问,可设置为"0.0.0.0"或者true
      strictPort: false, // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口。
      cors: true, // 为开发服务器配置 CORS。默认启用并允许任何源
    },
    resolve: { alias: { '@': resolve(__dirname, 'src') } },
  };
});
